//
//  NSString+JYJDES.m
//  24_加密
//
//  Created by 冀永金 on 16/8/16.
//  Copyright © 2016年 KX. All rights reserved.
//

#import "NSString+JYJDES.h"
#import <CommonCrypto/CommonCrypto.h>
// 必须8位
#define key @"123456"
// 向量
static Byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8};
@implementation NSString (JYJDES)
- (NSString *)stringWithDES {
    // 将字符串本身转换成C字符串
    const char *string = [self UTF8String];
    // 接受容器
    unsigned char byte[1024];
    // 容器大小
    size_t dataOutMoved = 0;
    // DES加密过程
    // 参数1：加密 /解密
    // 参数2：加密 /解密方式
    // 参数3：分组密码的选择
    // 参数4：秘钥
    // 参数5：秘钥的大小
    // 参数6：向量
    // 参数7：c的字符串
    // 参数8：长度length
    // 参数9：接受容器
    // 参数10：容器的大小
    // 参数11：容器的最终个数
    CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);
    // 判断是否成功
    if (cryptorStatus == kCCSuccess) {
        // 转换成字符串---base64
        NSData *desData = [NSData dataWithBytes:byte length:dataOutMoved];
        NSString *desBase64String = [desData base64EncodedStringWithOptions:  NSDataBase64Encoding64CharacterLineLength];
        return desBase64String;
    }
    else {
        NSLog(@"加密失败");
        return nil;
    }
}
- (NSString *)desWithString {
  // 字符串转data
    NSData *data = [[NSData alloc]initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
    const void *byte = data.bytes;
    
    unsigned char buffer[1024];
    size_t dataOutMoved = 0;
    CCCryptorStatus cryptorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, [data length], buffer, 1024, &dataOutMoved);
    if (cryptorStatus == kCCSuccess) {
        NSData *data = [[NSData alloc]initWithBytes:buffer length:dataOutMoved];
        NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        return string;
    }
    return nil;
}
@end
